Repository navigation
qa(checklist): re-point eight stale checklist items across five cards to the product at e540baf8 - #33273
Merged
objectstack-fleet[bot] merged 5 commits intoNov 14, 2026
Conversation
…l (card 33032)
records-forms.field-unique-enforcement r14: acceptance[0] and automated.ref
expect the bare `unique: true` collision on the live SQLite leg to name the
field ('A record with this SKU already exists', developerMessage '... a
unique constraint on 'SKU' already holds this value.', `field` 'sku'), as
28a1527 made it and the dogfood pin already asserts.
api-backend.error-sentences-and-unique-violation-wire-code r9:
acceptance[2] and automated.ref expect details exactly
{developerMessage, field, object} with field = the duplicated column.
Item 3 of the card (ai.mcp-read-file-pdf-word-extraction acceptance[3]) is
already satisfied at this base: 29f9d3c landed its r2 (60 ms budget, the
zero-page shape named as a fixture signal, showcase_invoice_line.receipt)
after the reading the card was drafted from. No edit.
Claude-Session: https://claude.ai/code/session_017xRBcRZn9wGkMSrznVX4JS
Co-authored-by: Claude <noreply@anthropic.com>
…e product (card 33086)
api-backend.rest-metadata-config-contract r10: the `maintenance` radius is
four (POST {prefix}/_migrate-record-currency-codes joined it) and `item` is
fourteen (GET {prefix}/:type/:ns/:name rides the item read), as
packages/rest/src/rest-config-mount-table.pin.test.ts measures. steps[5]
to [7], acceptance[2] and the two variant rows re-counted; the duty to
enumerate each switch's radius from a route-table diff is kept.
api-backend.second-object-exposure-and-internal-fields r4: automated.ref
names the moved position pin in packages/objectql and the door's
delegation twin in packages/metadata-protocol, in place of a file that no
longer exists.
cli.validate-v18-authoring-verdicts r3: the controlled_by_parent arm
plants the shapes the parse refuses (no master_detail; two required ones,
inline and through objectExtensions); the optional master is a control;
the lint-only shape (an omitted `required` on the only master_detail)
moves to a new `os lint` clause, acceptance[3].
The card's fourth note, error-sentences acceptance[2], is the same clause
as item 2 of card 33032 and was re-pointed once, in that card's commit.
Claude-Session: https://claude.ai/code/session_017xRBcRZn9wGkMSrznVX4JS
Co-authored-by: Claude <noreply@anthropic.com>
…unning cause (card 33054) studio-authoring.flow-status-matches-runtime r6: for a known unboundCause the rail and header title read the worded cause (on a default boot, deployment_policy), and the platform's reason verbatim is the Problems note's detail, which describeFlowRunStatus does on purpose. acceptance[1], steps[3], the title, automated.ref (adds the runStatus unit pin) and source[0] follow; the note still counts as no problem, and negative[] is untouched. Claude-Session: https://claude.ai/code/session_017xRBcRZn9wGkMSrznVX4JS Co-authored-by: Claude <noreply@anthropic.com>
…4 a non-reader's forged decision gets (card 33060) approvals.record-page-decisions r6: the step's contributor-bound member can read the project but not its request, and every door that acts on a request answers such a caller REQUEST_NOT_FOUND, exactly as a missing id (ApprovalService.refuseUnreadableRequest), so the forged approve answers 404 and the request stays pending. 403 FORBIDDEN stays the answer to a reader who holds no slot. steps[8], acceptance[4] (clause, verify, evidence) and source[5] follow; negative[2] is unchanged. Claude-Session: https://claude.ai/code/session_017xRBcRZn9wGkMSrznVX4JS Co-authored-by: Claude <noreply@anthropic.com>
…connector (card 33091) platform-core.bare-name-one-holder-refusal r4: webhook (e55347d) and tool (c747cf0) both joined NAMESPACE_SCOPED_BARE_NAME_TYPES, so at this base the one covered type still held once per deployment is connector. acceptance[0] and [3], the title, fixtures, steps[1], negative[0], the variant and source[4] now drive a connector catalog descriptor qa_conn; webhook joins the per-namespace leg of acceptance[1] beside flow and agent, with the fixture note that a webhook-declaring package declares requires: ['webhooks', 'realtime']. acceptance[0] names the driven type as the complement of NAMESPACE_SCOPED_BARE_NAME_TYPES within the covered types, so the next narrowing reads as a re-check rather than a stale FAIL. Claude-Session: https://claude.ai/code/session_017xRBcRZn9wGkMSrznVX4JS Co-authored-by: Claude <noreply@anthropic.com>
Contributor
Author
|
domain:devx#2 · sunhaolin · session_017xRBcRZn9wGkMSrznVX4JS 席位核对 · ACCEPT · 2026-11-14T15:21Z · head
|
This was referenced Nov 14, 2026
Contributor
Author
objectstack-fleet
Bot
deleted the
claude/issue-33032-checklist-repoint-fold
branch
November 14, 2026 15:57
This was referenced Nov 14, 2026
docs(spec): metadata.endpoints.item names the package-qualified by-name read it already gates
#33312
Merged
This was referenced Nov 14, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Fixes #33032
Fixes #33054
Fixes #33060
Fixes #33086
Fixes #33091
Clause-②: no
Metadata-protocol: none
维护者速读
os validate的 controlled_by_parent 分支与新的os lint子句、Studio「未运行」原因的显示位置、非参与者伪造审批得 404、仍按部署唯一持有的类型从 webhook 改为 connector),每条都升了 revision 并补了 history 行。docs/qa/platform-checklist/areas/下 6 个 JSON 文件,不发布、不进运行时;回滚即 revert 本 PR。areas/platform-core.json(bare-name 条目改指 connector,并改为按NAMESPACE_SCOPED_BARE_NAME_TYPES的补集取类型)、areas/cli.json(新增 acceptance[3] 的os lint子句)、areas/approvals.json(acceptance[4] 的 404/403 分界)。pnpm check:platform-checklist,预期最后一行check-platform-checklist: OK — 16 areas, 427 items,symbol anchors 为1635/1645 resolved。What changes
One commit per card; every edited item bumps
revisionand appends ahistoryrow naming its card and the base it was read at (e540baf8).records-forms.field-unique-enforcementunique: truecollision names the field ('A record with this SKU already exists',field'sku'), as 28a1527 made itapi-backend.error-sentences-and-unique-violation-wire-code{developerMessage, field, object}, field = the duplicated column. This is also the trailing note on #33086, done once hereai.mcp-read-file-pdf-word-extractionshowcase_invoice_line.receipt) after the reading the card came fromapi-backend.rest-metadata-config-contractmaintenanceremoves 4 routes (addsPOST {prefix}/_migrate-record-currency-codes),itemremoves 14 (addsGET {prefix}/:type/:ns/:name); steps[5] to [7], acceptance[2], two variant rows. The duty to enumerate each switch's radius from a route-table diff (the #15542 ruling) is keptapi-backend.second-object-exposure-and-internal-fieldspackages/objectql/src/protocol-data-door-internal-field-positions.test.tsplus the delegation twin inpackages/metadata-protocolcli.validate-v18-authoring-verdictsos lintclause, acceptance[3]studio-authoring.flow-status-matches-runtimeunboundCause(else the reason), the reason verbatim is the Problems note's detail; negative[] untouched (ruling 6545938831 item ①)approvals.record-page-decisionsREQUEST_NOT_FOUND; 403FORBIDDENstays the answer to a reader with no slotplatform-core.bare-name-one-holder-refusalconnector(the only covered type outsideNAMESPACE_SCOPED_BARE_NAME_TYPESat this base); webhook joins the per-namespace leg with therequires: ['webhooks', 'realtime']fixture note; the driven type is named as that list's complementNo product code, no changeset (nothing here is in any package's published
files[];skip-changesetrides the create).coverage.jsonandFOLLOW-UPS.mdwere not touched: the gate neither regenerated nor required them.Tests
No test file changed. The judging gate and the derived local families, run at head
51098eec:pnpm check:platform-checklist
At base
e540baf8the same gate read1621/1631 resolved: the 14 new anchors this diff cites all resolve, and the residual stays 10.derived families (node scripts/pm/dispatch-gates.mjs --commands, 16)
All 16 exit 0, each exit captured before any pipe: check-adr-links (+ --self-test), check-closing-keyword-parity (+ --self-test), check-comment-mask-corpus, plan-test-core-shards --self-test,
@objectstack/lintcheck:doc-formula-expressions (exit 3 PREREQUISITE NOT MET on the first run, an unbuilt@objectstack/formula/@objectstack/lint; exit 0 after building those two under the verify lock), check:ci-filter-parity, check:cross-package-test-inputs, check:doc-authoring, check:driver-memory-census, check:gitlink-declared, check:nul-bytes, check:platform-checklist, check:refd-timer-probe, check:watch-hint-literal.dispatch-gates --ran: 16 derived, 16 run, 0 NOT-MEASURED, 0 UNRUN.Acceptance notes
toolis no longer held once per deployment: c747cf0 (feat(objectql, core, metadata)!: tool names held per namespace, and the metadata service keeps each package's tool in its own (package, name) slot (ADR-0150 child B) #33124) put it inNAMESPACE_SCOPED_BARE_NAME_TYPESafter QA's control at 8e3d4a5, so the one covered type outside that list isconnector, and Re-point platform-core.bare-name-one-holder-refusal acceptance[0] and [3] fromwebhooktotool: webhooks are held per namespace since #32577 #33091's item drives it.connectorinstall refusal and cold-boot warning (held by the connector control cases ofpackages/objectql/src/registry-bare-name-one-holder-flow-family.test.ts), and the newos lintclause of the cli item (its rule's reach note inpackages/lint/src/data-model-rules.tsand its unit pin). Theos validate/os buildexit 0 on the omitted-requiredshape is QA's live reading. The next QA run scores these.REQUEST_NOT_FOUNDto anyone who cannot read the request (ApprovalService.refuseUnreadableRequest, asked by decide, recall, send back, resubmit, reassign, remind, request info and comment). Participants (submitter, current approver, past actor) and the override actor can read it.approvals.request-page-reply-and-reader-visibilityacceptance[1] (rev 5): stale. The org member, who is neither approver nor submitter on a showcase request, cannot read it (no showcase object declaresenable.approvalsVisibleToReaders), so the comment POST answers 404REQUEST_NOT_FOUND, not 403FORBIDDEN.approvals.quorum-m-of-nsteps[4] (rev 9): half stale. The repeat-actor probe by Ada (a past actor, so a reader) answering 403 holds. "A user holding none of the routed positions is refused the same way" does not: that non-participant gets 404.approvals.decision-action-matrixacceptance[6] (rev 10): under-specified. "Recall attempted by a non-submitter is FORBIDDEN" holds for a non-submitter who can read the request (a pending approver), but a non-participant gets 404. The clause names no persona. negative[2] (N2) is not stale: it judges acceptance, not the refusal code.api-backend.rest-metadata-config-contract: theitemswitch'sdescribe()(packages/spec/src/api/rest-server.zod.ts) still omitsGET /meta/:type/:ns/:name, though the mount table gates it. Themaintenancedescribe() is current. checklist: re-point three api clauses that lag the product at 8e3d4a54 (QA 18.4.0 R2 part B, B-api slice) #33086 names this as its own QA card (card-B-api-5); this PR leaves the spec alone.Verification
Session:
session_017xRBcRZn9wGkMSrznVX4JS(seatdomain:devx#2).Generated by Claude Code